#pragma once

#include <memory>
#include <string>

#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/function.hpp>

namespace TrueText {

class Stream;
class FaceImpl;

class Face
{
public:
	// Instantiates face from a given data stream. Stream is parsed by FreeType.
	// Font size is set to DEFAULT_HEIGHT.
	Face(std::string id, boost::function<boost::shared_ptr<Stream> ()> dataGetter);
    Face(const Face& rhs);
    const Face& operator=(const Face& rhs);
    ~Face();

	// Font face name.
	std::string GetFamilyName() const;
    std::string GetStyleName() const;
    
    boost::shared_ptr<FaceImpl> getImpl() const;
private:
    boost::shared_ptr<FaceImpl> impl;
};

}